#ifndef __WIZ_DATATYPE_GRAPH_TEMPLATE_HPP__SHANHAOBO_19800429__
#define __WIZ_DATATYPE_GRAPH_TEMPLATE_HPP__SHANHAOBO_19800429__

#include "../../Core/Container/WizDataTypeMap.hpp"
#include "../../Core/Container/WizDataTypeSet.hpp"

namespace Wiz
{
    namespace Graph
    {
        namespace Node
        {
            template<class LikT>
            class Type
            {
                WIZ_DECLARE_CLASS_THIS(Type);
                typedef ::Wiz::Map::Type<LikT, tThis*> TransTable;
            public:
                Type()
                {
                }
            public:
                ::Wiz::Void::Type GoTo(LikT Lik, tThis* NodePtr)
                {
                    m_InputTable.Insert(Lik, NodePtr);
                }
                tThis* GetInputNode(LikT Lik)
                {
                    TransTable::tIterator Itr = m_InputTable.Find(Lik);
                    if (Itr == m_InputTable.End())
                    {
                        return WIZ_NULLPTR;
                    }
                    return Itr.GetValue();
                }
                tThis* GetOutputNode(LikT Lik)
                {
                    TransTable::tIterator Itr = m_OutputTable.Find(Lik);
                    if (Itr == m_OutputTable.End())
                    {
                        return WIZ_NULLPTR;
                    }
                    return Itr.GetValue();
                }
            protected:
                TransTable                          m_InputTable;
                TransTable                          m_OutputTable;
            };
        } /// end of namespace Node
        template<class ParamT> class Type;
    } /// end of namespace Graph
} /// end of namespace Wiz

#endif /*__WIZ_DATATYPE_GRAPH_TEMPLATE_HPP__SHANHAOBO_19800429__*/

#if defined(WIZ_GRAPH_PARAM_COUNT) && (WIZ_GRAPH_PARAM_COUNT >= 0) && (WIZ_GRAPH_PARAM_COUNT < 255)

namespace Wiz
{
    namespace Graph
    {
        namespace Node
        {
            
        } /// end of namespace Node

        template<class Ret WIZ_COMMA_IF(WIZ_GRAPH_PARAM_COUNT) WIZ_ENUM_PARAM_X(WIZ_GRAPH_PARAM_COUNT, class T)>
        class Type<Ret(WIZ_ENUM_PARAM_X(WIZ_GRAPH_PARAM_COUNT, T))>
        {
        public:

        };
    } /// end of namespace Graph
} /// end of namespace Wiz

#endif /*defined(WIZ_GRAPH_PARAM_COUNT) && (WIZ_GRAPH_PARAM_COUNT >= 0) && (WIZ_GRAPH_PARAM_COUNT < 255)*/
